#include "tcpclient.h"
#include "ui_tcpclient.h"
#include <QByteArray>
#include <QDebug>
#include <QMessageBox>
#include <QHostAddress>

TcpClient::TcpClient(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::TcpClient)
{
    ui->setupUi(this);
    //设置窗口大小
    resize(500,400);
    loadConfig();
    //将【发送信号对象】、【信号】、【处理信号对象】、【处理方法】进行绑定
    connect(&m_tcpSocket,SIGNAL(connected()),this,SLOT(showConnect()));

    //根据IP地址和端口连接服务器
    m_tcpSocket.connectToHost(QHostAddress(m_strIP),m_usPort);
}

TcpClient::~TcpClient()
{
    delete ui;
}

//打开配置文件，获取服务器的IP地址和端口
void TcpClient::loadConfig()
{
    QFile file(":/client.config");
    //open方法的返回值为bool，成功打开返回true，失败返回false
    if(file.open(QIODevice::ReadOnly)){
        QByteArray baData=file.readAll();
        QString strData=baData.toStdString().c_str();
        //替换字符串中的\r\n
        strData.replace("\r\n"," ");
        //通过空格进行分割
        QStringList strList= strData.split(" ");
        m_strIP=strList.at(0);
        m_usPort=strList.at(1).toUShort();
        qDebug()<<"IP:"<<m_strIP<<"port:"<<m_usPort;
        file.close();
    }
    else {
        QMessageBox::critical(this,"open config","open config 失败");
    }
}

void TcpClient::showConnect()
{
    QMessageBox::information(this,"连接服务器","连接服务器成功！");
}


//void TcpClient::on_sendButton_clicked()
//{
//    qDebug()<<"点击发送按钮";
//    QString strMsg=ui->lineEdit->text();
//    if(!strMsg.isEmpty()){
//        //根据输入的字符串长度动态建立对应大小的PDU
//        PDU *pdu=mkPDU(strMsg.size());
//        // 消息类型（随便给的）
//        pdu -> uiMsgType = 0;
//        //将数据拷贝到PDU的iMsg中
//        memcpy(pdu->iMsg,strMsg.toStdString().c_str(),strMsg.size());
//        //通过socket发送信息
//        m_tcpSocket.write((char*)pdu,pdu->uiPDULen);
//        free(pdu);
//        pdu=NULL;
//    }
//    else {
//        QMessageBox::warning(this,"信息发送","发送的信息不能为空");
//    }
//}




void TcpClient::on_login_clicked()
{

}

void TcpClient::on_register_2_clicked()
{
    QString name=ui->account->text();
    QString password=ui->password->text();
    // 合理性判断
    if(!name.isEmpty() && !password.isEmpty()){
       // 注册信息用户名和密码将通过caFileData[64]传输
       PDU *pdu = mkPDU(0); // 实际消息体积为0
       pdu -> uiMsgType = ENUM_MSG_TYPE_REGISTER_REQUEST; // 设置为注册请求消息类型
       // 拷贝用户名和密码信息到caFileData[64]
       memcpy(pdu -> caFileData, name.toStdString().c_str(), 32); // 由于数据库设定的32位，所以最多只拷贝前32位
       memcpy(pdu -> caFileData + 32, password.toStdString().c_str(), 32);
       m_tcpSocket.write((char*)pdu, pdu -> uiPDULen); // 发送消息

       // 释放空间
       free(pdu);
       pdu = NULL;
    }
    else
    {
        QMessageBox::critical(this, "注册", "注册失败：用户名或密码为空！");
    }
}

void TcpClient::on_logout_clicked()
{

}
